package com.android.example.leanback.search; import android.content.ContentUris; import android.database.Cursor; import android.net.Uri; import android.test.ProviderTestCase2; import android.util.Log; import android.util.Pair; public class SearchContentProviderTest extends ProviderTestCase2<SearchContentProvider> { private final static String TAG = SearchContentProviderTest.class.getSimpleName(); public SearchContentProviderTest() { super(SearchContentProvider.class, UniversalSearchContract.AUTHORITY); } private Cursor getVideoCursor() { return getMockContentResolver().query(UniversalSearchContract.Video.CONTENT_URI, null, // projection[] null, // selection null, // selectionArgs[] null // sortOrder ); } private Pair<Long, String> getMiddleRow() { final Cursor cursor = getVideoCursor(); assertNotNull(cursor); assertTrue(cursor.getCount() > 0); assertTrue(cursor.moveToPosition(cursor.getCount() / 2)); final long id = cursor.getLong(cursor.getColumnIndexOrThrow(UniversalSearchContract.Video.ID)); final String title = cursor.getString(cursor.getColumnIndexOrThrow(UniversalSearchContract.Video.TITLE)); cursor.close(); Log.d(TAG, "Sample row: " + id + " " + title); return new Pair<>(id, title); } public void testMockData() { final Cursor cursor = getVideoCursor(); assertNotNull(cursor); assertTrue(cursor.getCount() > 0); cursor.close(); } public void testVideoQueryAll() { final Cursor cursor = getVideoCursor(); assertNotNull(cursor); // test complete iteration, unlike testMockData assertTrue(cursor.moveToFirst()); int count = 0; do { count++; } while (cursor.moveToNext()); assertTrue(count == cursor.getCount()); cursor.close(); } public void testVideoQueryById() { final Pair<Long, String> data = getMiddleRow(); final Cursor cursor = getMockContentResolver().query( ContentUris.withAppendedId(UniversalSearchContract.Video.CONTENT_URI, data.first), null, // projection[] null, // selection null, // selectionArgs[] null // sortOrder ); assertNotNull(cursor); assertEquals(1, cursor.getCount()); assertTrue(cursor.moveToFirst()); assertEquals(data.first.longValue(), cursor.getLong(cursor.getColumnIndexOrThrow(UniversalSearchContract.Video.ID))); assertEquals(data.second, cursor.getString(cursor.getColumnIndexOrThrow(UniversalSearchContract.Video.TITLE))); cursor.close(); } public void testFtsQuery() { final Pair<Long, String> data = getMiddleRow(); final Cursor cursor = getMockContentResolver().query( Uri.withAppendedPath(UniversalSearchContract.SearchView.CONTENT_URI, data.second.toLowerCase()), null, // projection[] null, // selection null, // selectionArgs[] null // sortOrder ); assertNotNull("Cursor not null", cursor); assertTrue("Result set not empty", cursor.getCount() > 0); boolean found = false; if (cursor.moveToFirst()) { final int idx = cursor.getColumnIndexOrThrow(UniversalSearchContract.Video.ID); do { if (data.first == cursor.getLong(idx)) { found = true; break; } } while (cursor.moveToNext()); } cursor.close(); assertTrue("Row with id " + data.first + " in the result set", found); } } // EOF